package pl.wr.particle.def.matter;

import pl.wr.core.physics.IPhysicalObject;
import pl.wr.particle.ParticleProperties;
import pl.wr.particle.def.interactions.IGravitationForce;

/**
 * Cząstka elementarna lub złożona
 * 
 * @version 1.0
 * @author wieslaw.rodak
 * 
 */
public interface IParticle extends IPhysicalObject, IGravitationForce {

    /**
     * @return właściwości
     */
    @Override
    ParticleProperties getProperties();

    /**
     * fuzja cząstki z innymi
     * 
     * @param particles
     *            cząstki dostarczone
     * @return cząstki otrzymane
     */
    IParticle[] fusion(IParticle[] particles);

    /**
     * rozpad cząstki
     * 
     * @return cząstki otrzymane
     */
    IParticle[] decay();

    void setParentParticle(IParticle parentParticle);

    /**
     * sprawdz poprawnosc czastki
     * 
     * @return true jesli poprawna
     */
    boolean validateParticle();

    /**
     * @return
     */
    IParticle getParentParticle();

}
